package Oop01;

public class Oop01 {
    public static void main(String[] args) {
        /*多态
            即同一个方法可以根据发送对象的不同而采用多种不同的行为方式
            一个对象的实际类型是确定的 ， 但可以指向对象的引用类型有很多
          多态存在的条件
            有继承关系
            子类重写父类的方法
            父类引用指向子类
          注意
            多态是方法的多态 ， 属性没有多态
        * */
        //一个对象的实际类型是确定的 ， 可以指向的实际类型就不确定了 ，
        //对象能执行哪些方法 ， 主要看对象左边的类型 ， 和右边关系不大
        Student s1 = new Student();//可以调用自己的方法和父类的方法
        Person s2 = new Student();//可以指向子类 ， 但不能调用子类独有的方法
        Object s3 = new Student();
        s2.run();//子类重写了父类的方法执行子类

        /*总结
        注意事项
            多态是方法的多态 ， 属性没有多态
            多态的存在条件 需要有继承关系 ，方法需要被重写， 父类的引用指向子类对象 Father f1 = new Son();
                不能重写的方法有哪些
                    1. static 静态方法 ，属于类 ， 不属于任何实例 ， 它是与类相关的
                    2. final 常量修饰符 ，被 final 修饰的方法是在常量池里面的 ， 不能被重写 ，被 final 修饰的类就不能被继承了 ， 就没有子类了
                    3. private 私有方法 ， 不能被重写。
        * */
    }
}
